home *** CD-ROM | disk | FTP | other *** search
- /* VERSION 0004 (DATE: 28/04/87) (TIME: 17:06) */
- /*
- e (qed) screen editor
-
- (C) G. Nigel Gilbert, MICROLOGY, 1981
-
- August-December 1981
-
- Modified: Aug-Dec 1984: BDS-C 'e'(vers 4.6a) to 'qe' (J.W. Haefner)
- March 1985: BDS-C 'qe' to DeSmet-C 'qed' (J.W. Haefner)
-
- FILE: qed7
-
- FUNCTIONS: getkey,testkey,getlow,testlow,getscankey,inkey,putret,
- dispch,putch,inword,uspr,makedim,makebright,
- putclr,dohelp
-
- PURPOSE: low level terminal i/o functions
-
- */
-
- #include "qed.h"
-
- char getkey() /*wait for a key to be pressed & return it, translating
- to internal codes */
- {
- char c;
-
- while (!(c=testkey()));
- return c;
- }
-
- char testkey() /*if a key has been pressed, return it, else 0, translating*/
- {
- char c, *tranp;
- int i;
-
- if (!(c=inkey())) return 0;
- if (c == *(tranp=tran)) {
- while (!(c=inkey()));
- c|=PARBIT;
- }
- if (c == BACKSP) return LEFTKEY; /* synonym for move cursor left*/
- for (i=1,tranp++; i < NKEYS; i++, tranp++)
- if (c == *tranp) return i;
- return c;
- }
-
- char getlow() /*get a key, converting control and u/c keys to l/c,
- translation of ESCKEY only */
- {
- char c;
-
- while (!(c=testlow()));
- return c;
- }
-
- char testlow() /*test for a key, convert upper and control chars to lower case*/
- {
- char c;
-
- if (!(c=inkey())) return 0;
- if (tran[ESCKEY] == c) return ESCKEY;
- if (c < ' ') c=c+96;
- return (c >= 'A' && c <= 'Z' ? c+32 : c);
- }
-
- char getscankey() /*get a key, translation of ESCKEY, CR, LEFTKEY, DELLEFT,
- RETRIEVE only */
- {
- char c;
-
- while (!(c=inkey()));
- if (tran[ESCKEY] == c) return ESCKEY_P;
- if (tran[CR] == c) return CR_P;
- if (tran[LEFTKEY] == c) return LEFTKEY_P;
- if (tran[DELLEFT] == c) return DELLEFT_P;
- if (tran[RETRIEVE] == c) return RETRIEVE_P;
-
- return c;
- }
-
- char inkey() /*return last key press,or 0 if none*/
- {
- char c;
- sint i;
-
- if (inbufp) {
- c=inbuf[0];
- inbufp--;
- for (i=0; i < inbufp; i++) inbuf[i]=inbuf[i+1];
- }
- else c=_os(DIRIO,0xff) & ~PARBIT;
- return c;
- }
-
- putret() /*type a CR/LF*/
- {
- putch('\r');
- putch('\n');
- }
-
- dispch(c) /*type a character (in different intensity if non-printable*/
- char c;
- {
- if (c < ' ') {
- makeother();
- /*putch(c+64);*/
- _os(DIRIO,c+64);
- makeother();
- }
- /*else putch(c);*/
- else _os(DIRIO,c);
- }
-
- putch(c) /*type a character; test for keyboard input*/
- char c;
- {
- char cc;
- _os(DIRIO,c);
- if ( (cc=_os(DIRIO,0xff))) inbuf[inbufp++]=cc & ~PARBIT;
- }
-
- inword(c) /*return true if c is letter or digit*/
- char c;
- {
- return isalpha(c) || isdigit(c);
- }
-
- uspr(sn,ln) /*print 'n' as a number; return number of chars typed*/
- unsigned sn;
- long ln;
- {
- int temp;
- long n;
-
- n=0;
- if (!ln) n=sn;
- else n=ln;
- if (n < 10) {
- putch(n+'0');
- return 1;
- }
- temp=uspr(0,n/10);
- uspr(0,n%10);
- return temp+1;
- }
-
- makedim()
- {
- if (!isdim) {
- begdim();
- isdim=YES;
- }
- }
-
- makebright()
- {
- if (isdim) {
- enddim();
- isdim=NO;
- }
- }
-
- makeother()
- {
- if (isdim) makebright();
- else makedim();
- }
-
- putclr() /*clear the screen */
- {
- delpage(0);
- }
-
- dohelp() /*display help menu */
- {
- int y;
-
- /*pfirst=loc(pfirst,(HELPLINES-1));*/
- pfirst=loc(pfirst,(HELPLINES-topline));
- topline=HELPLINES;
- for (y=1; y < HELPLINES; y++) deleteline(0);
- if ((cline < pfirst) || (pfirst == lastl) ) {
- puttext();
- putpage();
- }
- gotoxy(0,1);
- displayhelp();
- /*blankedmess=NO;*/
- }